realmcrafterfandomcom-20200216-history
Taz's Fireball Spell
A fireball spell, released for free by Taz. ; tazgame ; Date/Time: 11:18:10 PM on 2/18/2009 ; By Tazco on NADDAZ ; Updated sunday april, 19, 2009 ; Note: Using Actorglobal 2 for magic skill level ;Updated sept 28 2010 added wisdom attribute and changed damage/spellcost. Function Main() Player = Actor() Target = ContextActor() Result% = ActorDistance(Player, Target) Plvl% = Actorlevel(Player) Tlvl% = Actorlevel(Target) PHealth% = MaxAttribute(Player, "Health") TargetMagiclvl% = Attribute(Target, "Magic") MagicLvl% = Attribute(Player, "Magic") ManaLevel% = Attribute(Player, "Mana") StaffDmg% = ItemAttribute(ActorWeapon(Player), "Magic") ;Staff damage PMana% = MAxAttribute(Player, "Mana") ;using in damage check FireBallDmg% = MagicLvl * 3 + PLvl + AbilityLevel(Player, "FireBall") + StaffDmg + Rand(30, 35) Firedmg% = FireBallDmg + Rnd(15, 20) ;total spell damage to be done TotFiredmg% = Firedmg If (TotFiredmg <= 0) ; if damage is not enough since target has good magic resistance then give min damage. TotFiredmg% = Rand(10, 25) Endif TName$ = Name(Target) PName$ = Name(Player) ;Check to see if target is in range If (Result > 80) ;check distance of target. Output(Player, "You are to far away!", 255, 0, 0) Return Endif If (Target = 0) ; Check target is valid Output(Player, "select a target for your spell!", 255, 0, 0) Return Endif SpellCost% = 25 + Rand(15, 20) ;Mana check If (ManaLevel < SpellCost) Output(Player, "insufficient mana - spell failed!") ;tell player they don`t have enough mana Return EndIf Thealth% = Attribute(Target, "Health") - TotFiredmg ; take damage from target health PBar% = CreateProgressBar(Player, 5, 85, 155, 0.40, 0.82, 0.2, 0.04, 5, 5, "Casting Fire Ball") ; casting bar Ticks% = 5 ;amount of for ticks also change the max and valve number in the PBar above. CreateEmitter(Player, "Flame", 8, 1800) ; casting emitter DoEvents(300) AnimateActor(Player, "Spell cast", .5, 2) ;Particles and casting animation Repeat Result% = ActorDistance(Player, Target) Ticks% = Ticks - 1 ;take 1 tick per half a sec UpdateProgressBar(Player, PBar, Ticks) ;update progress bar If (Result > 80) ;make sure the target is still in range for casting Output(Player, "Your target is to far away!") DeleteProgressBar(Player, PBar) ;delete progressbar DoEvents(500) Return Endif ;updated progress bar has to be before actor hp if dead check. Progress bar will update then be deleted if player is dead. Targethealth% = Attribute(Target, "Health") If (Targethealth <= TotFiredmg) ;target is dead stop pbar. Output(Player, "You have killed " + TName, 255, 0, 0) Output(Target, "You have been killed by " + PName + "!", 255, 0, 0) Ticks% = 0 DeleteProgressBar(Player, PBar) ;delete progressbar KillActor(Target, Player) Return Endif DoEvents(500) Until(Ticks = 0) ;end repeat if ticks = 0 ; PlaySound(Player, 1, 0) ;play fire sound SetAttribute(Player, "Mana", ManaLevel - SpellCost) AnimateActor(Player, "Spell cast", 2) ;Particles and casting animation DeleteProgressBar(Player, PBar) ;delete progressbar CreateEmitter(Player, "Flame", 8, 400) ;FireProjectile(Player, Target, "FireBall") DoEvents(100) CreateEmitter(Target, "Fire2", 470, 300) SetActorTarget(Target, Player) SetActorAIState(Target, 3) CreateFloatingNumber(Target, Firedmg, 255, 0, 0) ;red normal attack ;Output(Player, "Your total damage for this spell is " + Totfiredmg, 25, 54, 53) ;Tell player the amount of damage they did with there spell DoEvents(100) ;Kill target if health is 0 or lower. If (Thealth <= 0) Output(Player, "You have killed " + TName, 255, 0, 0) Output(Target, "You have been killed by " + PName + "!", 255, 0, 0) KillActor(Target, Player) Doevents(500) Return Endif SetAttribute(Target, "Health", Thealth) ;Do spell damage End Function